package com.easylinkin.sm.service;


import com.easylinkin.sm.dto.ResetPasswordVo;
import com.easylinkin.sm.entity.User;

import site.morn.boot.data.CrudService;
import site.morn.boot.data.DisplayableService;
import site.morn.boot.data.LockableService;

/**
 * 用户服务
 *
 * @author TianGanLin
 * @since 1.0.0, 2017/9/28
 */

public interface UserService extends CrudService<User, Long>, DisplayableService<User, Long>,
    LockableService<User, Long> {

  /**
   * 判断组织机构是否绑定用户
   *
   * @param departmentId 组织机构ID
   * @return 组织机构是否绑定用户
   */
  boolean existsByDepartment(Long departmentId);

  /**
   * 判断角色是否绑定用户
   *
   * @param roleId 角色ID
   * @return 角色是否绑定用户
   */
  boolean existsByRole(Long roleId);

  /**
   * 根据用户名查用户
   *
   * @param username 用户名
   * @return 用户
   */
  User findByUsername(String username);

  /**
   * 重置密码
   *
   * @param vo 视图对象
   */
  void resetPassword(ResetPasswordVo vo);

  /**
   * 修改密码
   *
   * @param vo 视图对象
   */
  void updatePassword(ResetPasswordVo vo);

  /**
   * 修改个人信息
   *
   * @param user 用户
   * @return 用户
   */
  User updateProfile(User user);

  /**
   * 忘记密码，重置密码
   *
   * @param username 用户名
   * @param password 新密码
   */
  void forgetPassword(String username, String password);

  /**
   * 生成验证码并发送到手机（缓存），生成验证码前先对表单校验
   *
   * @param username 用户名
   * @param phone 用户手机号
   * @param imageVode 图片验证码
   * @return 成功失败消息
   */
  String sendVerificationCode(String username, String phone, String imageVode);

  /**
   * 表单验证，图片验证码、用户名、手机号、验证码是否正确
   *
   * @param username 用户名
   * @param phone 用户手机号
   * @param imageVode 图片验证码
   * @param code 短信验证码
   * @return 成功失败消息
   */
  boolean verificationMessages(String username, String phone, String imageVode, String code);

  /**
   * 生成图片验证码（缓存）
   *
   * @return 图片验证码
   */
  String getImage();

}
